package vip.liux.contracts.security.core.extensions;

import org.springframework.context.support.MessageSourceAccessor;

public class IdentityErrorDescriber {
    protected MessageSourceAccessor messages = IdentityMessageSource.getAccessor();

    /**
     * 返回默认错误。
     *
     * @return 默认错误信息
     */
    public IdentityError defaultError() {
        return new IdentityError("DefaultError", messages.getMessage(IdentityResources.DefaultError));
    }

    /**
     * 返回乐观并发失败错误。
     *
     * @return 并发失败错误信息
     */
    public IdentityError concurrencyFailure() {
        return new IdentityError("ConcurrencyFailure", messages.getMessage(IdentityResources.ConcurrencyFailure));
    }

    /**
     * 返回密码不正确错误。
     *
     * @return 密码不正确错误信息
     */
    public IdentityError passwordMismatch() {
        return new IdentityError("PasswordMismatch", messages.getMessage(IdentityResources.PasswordMismatch));
    }

    /**
     * 返回无效令牌错误。
     *
     * @return 无效令牌错误信息
     */
    public IdentityError invalidToken() {
        return new IdentityError("InvalidToken", messages.getMessage(IdentityResources.InvalidToken));
    }

    /**
     * 返回恢复码兑换失败错误。
     *
     * @return 恢复码兑换失败错误信息
     */
    public IdentityError recoveryCodeRedemptionFailed() {
        return new IdentityError("RecoveryCodeRedemptionFailed", messages.getMessage(IdentityResources.RecoveryCodeRedemptionFailed));
    }

    /**
     * 返回已存在该登录方式的用户错误。
     *
     * @return 登录方式已关联错误信息
     */
    public IdentityError loginAlreadyAssociated() {
        return new IdentityError("LoginAlreadyAssociated", messages.getMessage(IdentityResources.LoginAlreadyAssociated));
    }

    /**
     * 返回用户名无效错误。
     *
     * @param userName 无效的用户名
     * @return 用户名无效错误信息
     */
    public IdentityError invalidUserName(String userName) {
        return new IdentityError("InvalidUserName", messages.getMessage(IdentityResources.InvalidUserName, new Object[]{userName}));
    }

    /**
     * 返回邮箱无效错误。
     *
     * @param email 无效的邮箱
     * @return 邮箱无效错误信息
     */
    public IdentityError invalidEmail(String email) {
        return new IdentityError("InvalidEmail", messages.getMessage(IdentityResources.InvalidEmail, new Object[]{email}));
    }

    /**
     * 返回用户名已存在错误。
     *
     * @param userName 已存在的用户名
     * @return 用户名已存在错误信息
     */
    public IdentityError duplicateUserName(String userName) {
        return new IdentityError("DuplicateUserName", messages.getMessage(IdentityResources.DuplicateUserName, new Object[]{userName}));
    }

    /**
     * 返回邮箱已存在错误。
     *
     * @param email 已存在的邮箱
     * @return 邮箱已存在错误信息
     */
    public IdentityError duplicateEmail(String email) {
        return new IdentityError("DuplicateEmail", messages.getMessage(IdentityResources.DuplicateEmail, new Object[]{email}));
    }

    /**
     * 返回角色名无效错误。
     *
     * @param role 无效的角色名
     * @return 角色名无效错误信息
     */
    public IdentityError invalidRoleName(String role) {
        return new IdentityError("InvalidRoleName", messages.getMessage(IdentityResources.InvalidRoleName, new Object[]{role}));
    }

    /**
     * 返回角色名已存在错误。
     *
     * @param role 已存在的角色名
     * @return 角色名已存在错误信息
     */
    public IdentityError duplicateRoleName(String role) {
        return new IdentityError("DuplicateRoleName", messages.getMessage(IdentityResources.DuplicateRoleName, new Object[]{role}));
    }

    /**
     * 返回用户已设置密码错误。
     *
     * @return 用户已设置密码错误信息
     */
    public IdentityError userAlreadyHasPassword() {
        return new IdentityError("UserAlreadyHasPassword", messages.getMessage(IdentityResources.UserAlreadyHasPassword));
    }

    /**
     * 返回未为该用户启用锁定错误。
     *
     * @return 未启用锁定错误信息
     */
    public IdentityError userLockoutNotEnabled() {
        return new IdentityError("UserLockoutNotEnabled", messages.getMessage(IdentityResources.UserLockoutNotEnabled));
    }

    /**
     * 返回用户已在角色中错误。
     *
     * @param role 角色名
     * @return 用户已在角色中错误信息
     */
    public IdentityError userAlreadyInRole(String role) {
        return new IdentityError("UserAlreadyInRole", messages.getMessage(IdentityResources.UserAlreadyInRole, new Object[]{role}));
    }

    /**
     * 返回用户不在角色中错误。
     *
     * @param role 角色名
     * @return 用户不在角色中错误信息
     */
    public IdentityError userNotInRole(String role) {
        return new IdentityError("UserNotInRole", messages.getMessage(IdentityResources.UserNotInRole, new Object[]{role}));
    }

    /**
     * 返回密码长度不足错误。
     *
     * @param length 密码长度
     * @return 密码长度不足错误信息
     */
    public IdentityError passwordTooShort(int length) {
        return new IdentityError("PasswordTooShort", messages.getMessage(IdentityResources.PasswordTooShort, new Object[]{length}));
    }

    /**
     * 返回密码不同字符数不足错误。
     *
     * @param uniqueChars 不同字符数
     * @return 密码不同字符数不足错误信息
     */
    public IdentityError passwordRequiresUniqueChars(int uniqueChars) {
        return new IdentityError("PasswordRequiresUniqueChars", messages.getMessage(IdentityResources.PasswordRequiresUniqueChars, new Object[]{uniqueChars}));
    }

    /**
     * 返���密码缺少非字母数字字符错误。
     *
     * @return 密码缺少非字母数字字符错误信息
     */
    public IdentityError passwordRequiresNonAlphanumeric() {
        return new IdentityError("PasswordRequiresNonAlphanumeric", messages.getMessage(IdentityResources.PasswordRequiresNonAlphanumeric));
    }

    /**
     * 返回密码缺少数字错误。
     *
     * @return 密码缺少数字错误信息
     */
    public IdentityError passwordRequiresDigit() {
        return new IdentityError("PasswordRequiresDigit", messages.getMessage(IdentityResources.PasswordRequiresDigit));
    }

    /**
     * 返回密码缺少小写字母错误。
     *
     * @return 密码缺少小写字母错误信息
     */
    public IdentityError passwordRequiresLower() {
        return new IdentityError("PasswordRequiresLower", messages.getMessage(IdentityResources.PasswordRequiresLower));
    }

    /**
     * 返回密码缺少大写字母错误。
     *
     * @return 密码缺少大写字母错误信息
     */
    public IdentityError passwordRequiresUpper() {
        return new IdentityError("PasswordRequiresUpper", messages.getMessage(IdentityResources.PasswordRequiresUpper));
    }
}
